#include "JSONParseUtils.h"

// 解析JSON数据种的消息类型
int parseMsgType(const char *data)
{
    // 解析json对象
    cJSON *json = cJSON_Parse(data);
    if (!json)
    {
        // 解析失败
        printf("json error: %s \r\n", cJSON_GetErrorPtr());
        // 删除释放内存
        cJSON_Delete(json);
        return -1;
    }else
    {
        // 获取消息类型
        cJSON *msgTypeItem = cJSON_GetObjectItem(json, "msgType");
        if (!msgTypeItem) 
        {
            printf("json error: missing 'msgType' field\r\n");
            cJSON_Delete(json);
            return -1;
        }
        int type = msgTypeItem->valueint;
        cJSON_Delete(json);
        return type;
    }
}

// 解析JSON数据中的消息
int parseMsgData(THData *thdata, const char *data)
{
    // 解析json对象
    cJSON *json = cJSON_Parse(data);
    // 声明数据JSON对象
    cJSON *infor;
    if (!json)
    {
        // 解析失败
        printf("json error: %s \r\n", cJSON_GetErrorPtr());
        // // 删除释放内存
        // cJSON_Delete(json);
        return -1;
    }else
    {
        // "{\"msgType\":1,\"content\":{\"state\":15,\"temp\":20,\"humi\":30,\"somke\":60,\"suns\":80}}"
        // 获取消息数据对象
        infor = cJSON_GetObjectItem(json, "content");
        // 解析数据
        thdata->state = cJSON_GetObjectItem(infor, "state")->valueint;
        thdata->temp = cJSON_GetObjectItem(infor, "temp")->valueint;
        thdata->humi = cJSON_GetObjectItem(infor, "humi")->valueint;
        thdata->somke = cJSON_GetObjectItem(infor, "somke")->valueint;
        thdata->sunshine = cJSON_GetObjectItem(infor, "suns")->valueint;
        // 释放内存
        // cJSON_Delete(infor);
        cJSON_Delete(json); 
        return 1;
    }
}